home *** CD-ROM | disk | FTP | other *** search
- package java.net;
-
- import java.io.File;
- import java.io.FilePermission;
- import java.io.IOException;
- import java.nio.ByteBuffer;
- import java.security.AccessControlContext;
- import java.security.AccessController;
- import java.security.CodeSigner;
- import java.security.CodeSource;
- import java.security.Permission;
- import java.security.PermissionCollection;
- import java.security.PrivilegedActionException;
- import java.security.SecureClassLoader;
- import java.util.Enumeration;
- import java.util.jar.Attributes;
- import java.util.jar.Manifest;
- import java.util.jar.Attributes.Name;
- import sun.misc.Resource;
- import sun.misc.SharedSecrets;
- import sun.misc.URLClassPath;
- import sun.net.www.ParseUtil;
-
- public class URLClassLoader extends SecureClassLoader {
- URLClassPath ucp;
- private AccessControlContext acc;
-
- public URLClassLoader(URL[] var1, ClassLoader var2) {
- super(var2);
- SecurityManager var3 = System.getSecurityManager();
- if (var3 != null) {
- var3.checkCreateClassLoader();
- }
-
- this.ucp = new URLClassPath(var1);
- this.acc = AccessController.getContext();
- }
-
- public URLClassLoader(URL[] var1) {
- SecurityManager var2 = System.getSecurityManager();
- if (var2 != null) {
- var2.checkCreateClassLoader();
- }
-
- this.ucp = new URLClassPath(var1);
- this.acc = AccessController.getContext();
- }
-
- public URLClassLoader(URL[] var1, ClassLoader var2, URLStreamHandlerFactory var3) {
- super(var2);
- SecurityManager var4 = System.getSecurityManager();
- if (var4 != null) {
- var4.checkCreateClassLoader();
- }
-
- this.ucp = new URLClassPath(var1, var3);
- this.acc = AccessController.getContext();
- }
-
- protected void addURL(URL var1) {
- this.ucp.addURL(var1);
- }
-
- public URL[] getURLs() {
- return this.ucp.getURLs();
- }
-
- protected Class<?> findClass(String var1) throws ClassNotFoundException {
- try {
- return (Class)AccessController.doPrivileged(new 1(this, var1), this.acc);
- } catch (PrivilegedActionException var3) {
- throw (ClassNotFoundException)var3.getException();
- }
- }
-
- private Class defineClass(String var1, Resource var2) throws IOException {
- int var3 = var1.lastIndexOf(46);
- URL var4 = var2.getCodeSourceURL();
- if (var3 != -1) {
- String var5 = var1.substring(0, var3);
- Package var6 = this.getPackage(var5);
- Manifest var7 = var2.getManifest();
- if (var6 != null) {
- if (var6.isSealed()) {
- if (!var6.isSealed(var4)) {
- throw new SecurityException("sealing violation: package " + var5 + " is sealed");
- }
- } else if (var7 != null && this.isSealed(var5, var7)) {
- throw new SecurityException("sealing violation: can't seal package " + var5 + ": already loaded");
- }
- } else if (var7 != null) {
- this.definePackage(var5, var7, var4);
- } else {
- this.definePackage(var5, (String)null, (String)null, (String)null, (String)null, (String)null, (String)null, (URL)null);
- }
- }
-
- ByteBuffer var9 = var2.getByteBuffer();
- if (var9 != null) {
- CodeSigner[] var11 = var2.getCodeSigners();
- CodeSource var13 = new CodeSource(var4, var11);
- return this.defineClass(var1, var9, var13);
- } else {
- byte[] var10 = var2.getBytes();
- CodeSigner[] var12 = var2.getCodeSigners();
- CodeSource var8 = new CodeSource(var4, var12);
- return this.defineClass(var1, var10, 0, var10.length, var8);
- }
- }
-
- protected Package definePackage(String var1, Manifest var2, URL var3) throws IllegalArgumentException {
- String var4 = var1.replace('.', '/').concat("/");
- String var5 = null;
- String var6 = null;
- String var7 = null;
- String var8 = null;
- String var9 = null;
- String var10 = null;
- String var11 = null;
- URL var12 = null;
- Attributes var13 = var2.getAttributes(var4);
- if (var13 != null) {
- var5 = var13.getValue(Name.SPECIFICATION_TITLE);
- var6 = var13.getValue(Name.SPECIFICATION_VERSION);
- var7 = var13.getValue(Name.SPECIFICATION_VENDOR);
- var8 = var13.getValue(Name.IMPLEMENTATION_TITLE);
- var9 = var13.getValue(Name.IMPLEMENTATION_VERSION);
- var10 = var13.getValue(Name.IMPLEMENTATION_VENDOR);
- var11 = var13.getValue(Name.SEALED);
- }
-
- var13 = var2.getMainAttributes();
- if (var13 != null) {
- if (var5 == null) {
- var5 = var13.getValue(Name.SPECIFICATION_TITLE);
- }
-
- if (var6 == null) {
- var6 = var13.getValue(Name.SPECIFICATION_VERSION);
- }
-
- if (var7 == null) {
- var7 = var13.getValue(Name.SPECIFICATION_VENDOR);
- }
-
- if (var8 == null) {
- var8 = var13.getValue(Name.IMPLEMENTATION_TITLE);
- }
-
- if (var9 == null) {
- var9 = var13.getValue(Name.IMPLEMENTATION_VERSION);
- }
-
- if (var10 == null) {
- var10 = var13.getValue(Name.IMPLEMENTATION_VENDOR);
- }
-
- if (var11 == null) {
- var11 = var13.getValue(Name.SEALED);
- }
- }
-
- if ("true".equalsIgnoreCase(var11)) {
- var12 = var3;
- }
-
- return this.definePackage(var1, var5, var6, var7, var8, var9, var10, var12);
- }
-
- private boolean isSealed(String var1, Manifest var2) {
- String var3 = var1.replace('.', '/').concat("/");
- Attributes var4 = var2.getAttributes(var3);
- String var5 = null;
- if (var4 != null) {
- var5 = var4.getValue(Name.SEALED);
- }
-
- if (var5 == null && (var4 = var2.getMainAttributes()) != null) {
- var5 = var4.getValue(Name.SEALED);
- }
-
- return "true".equalsIgnoreCase(var5);
- }
-
- public URL findResource(String var1) {
- URL var2 = (URL)AccessController.doPrivileged(new 2(this, var1), this.acc);
- return var2 != null ? this.ucp.checkURL(var2) : null;
- }
-
- public Enumeration<URL> findResources(String var1) throws IOException {
- Enumeration var2 = this.ucp.findResources(var1, true);
- return new 3(this, var2);
- }
-
- protected PermissionCollection getPermissions(CodeSource var1) {
- PermissionCollection var2 = super.getPermissions(var1);
- URL var3 = var1.getLocation();
-
- Object var4;
- URLConnection var5;
- try {
- var5 = var3.openConnection();
- var4 = var5.getPermission();
- } catch (IOException var8) {
- var4 = null;
- var5 = null;
- }
-
- if (var4 instanceof FilePermission) {
- String var6 = ((Permission)var4).getName();
- if (var6.endsWith(File.separator)) {
- var6 = var6 + "-";
- var4 = new FilePermission(var6, "read");
- }
- } else if (var4 == null && var3.getProtocol().equals("file")) {
- String var11 = var3.getFile().replace('/', File.separatorChar);
- var11 = ParseUtil.decode(var11);
- if (var11.endsWith(File.separator)) {
- var11 = var11 + "-";
- }
-
- var4 = new FilePermission(var11, "read");
- } else {
- URL var10 = var3;
- if (var5 instanceof JarURLConnection) {
- var10 = ((JarURLConnection)var5).getJarFileURL();
- }
-
- String var7 = var10.getHost();
- if (var7 == null) {
- var7 = "localhost";
- }
-
- var4 = new SocketPermission(var7, "connect,accept");
- }
-
- if (var4 != null) {
- SecurityManager var13 = System.getSecurityManager();
- if (var13 != null) {
- AccessController.doPrivileged(new 4(this, var13, (Permission)var4), this.acc);
- }
-
- var2.add((Permission)var4);
- }
-
- return var2;
- }
-
- public static URLClassLoader newInstance(URL[] var0, ClassLoader var1) {
- AccessControlContext var2 = AccessController.getContext();
- URLClassLoader var3 = (URLClassLoader)AccessController.doPrivileged(new 5(var0, var1));
- var3.acc = var2;
- return var3;
- }
-
- public static URLClassLoader newInstance(URL[] var0) {
- AccessControlContext var1 = AccessController.getContext();
- URLClassLoader var2 = (URLClassLoader)AccessController.doPrivileged(new 6(var0));
- var2.acc = var1;
- return var2;
- }
-
- // $FF: synthetic method
- static Class access$000(URLClassLoader var0, String var1, Resource var2) throws IOException {
- return var0.defineClass(var1, var2);
- }
-
- // $FF: synthetic method
- static AccessControlContext access$100(URLClassLoader var0) {
- return var0.acc;
- }
-
- static {
- SharedSecrets.setJavaNetAccess(new 7());
- }
- }
-